]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionSystem: Add a gsettings key to disable version validation
authorAdel Gadllah <adel.gadllah@gmail.com>
Tue, 18 Feb 2014 17:10:22 +0000 (18:10 +0100)
committerAdel Gadllah <adel.gadllah@gmail.com>
Wed, 19 Feb 2014 16:07:38 +0000 (17:07 +0100)
Add a key 'disable-extension-version-validation' key that disables
the validation of extension's claimed to be supported shell version
with the shell version and just load all extensions unconditionally.

https://bugzilla.gnome.org/show_bug.cgi?id=724683

data/org.gnome.shell.gschema.xml.in.in
js/ui/extensionSystem.js

index d8eac18157cbed1f1265d945df4f9e039e01847b..0f96e64b95c7c792db7c8e6d9a89a4120a488569 100644 (file)
         EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
       </_description>
     </key>
+    <key name="disable-extension-version-validation" type="b">
+      <default>false</default>
+      <_summary>Disables the validation of extension version compatibility</_summary>
+      <_description>
+        GNOME Shell will only load extensions that claim to support the current
+        running version. Enabling this option will disable this check and try to
+        load all extensions regardless of the versions they claim to support.
+      </_description>
+    </key>
     <key name="favorite-apps" type="as">
       <default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
       <_summary>List of desktop file IDs for favorite applications</_summary>
index 40a48876ef81578e70965e360eb6c3b3fadc5bb6..3f0e1709c1509bcb0d75364cef0ef81d5e3aab51 100644 (file)
@@ -38,6 +38,7 @@ const connect = Lang.bind(_signals, _signals.connect);
 const disconnect = Lang.bind(_signals, _signals.disconnect);
 
 const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
+const EXTENSION_DISABLE_VERSION_CHECK_KEY = 'disable-extension-version-validation';
 
 var initted = false;
 var enabled;
@@ -156,7 +157,9 @@ function loadExtension(extension) {
     // Default to error, we set success as the last step
     extension.state = ExtensionState.ERROR;
 
-    if (ExtensionUtils.isOutOfDate(extension)) {
+    let checkVersion = !global.settings.get_boolean(EXTENSION_DISABLE_VERSION_CHECK_KEY);
+
+    if (checkVersion && ExtensionUtils.isOutOfDate(extension)) {
         extension.state = ExtensionState.OUT_OF_DATE;
     } else {
         let enabled = enabledExtensions.indexOf(extension.uuid) != -1;
@@ -267,8 +270,19 @@ function onEnabledExtensionsChanged() {
     enabledExtensions = newEnabledExtensions;
 }
 
+function _onVersionValidationChanged() {
+    if (Main.sessionMode.allowExtensions) {
+        enabledExtensions.forEach(function(uuid) {
+            if (ExtensionUtils.extensions[uuid])
+                reloadExtension(ExtensionUtils.extensions[uuid]);
+        });
+    }
+}
+
 function _loadExtensions() {
     global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged);
+    global.settings.connect('changed::' + EXTENSION_DISABLE_VERSION_CHECK_KEY, _onVersionValidationChanged);
+
     enabledExtensions = getEnabledExtensions();
 
     let finder = new ExtensionUtils.ExtensionFinder();